package main

import (
	"fmt"
)

type TreeNode struct {
	Val   int
	Left  *TreeNode
	Right *TreeNode
}

/*
别人写的，思路是先深度搜索右边，如果当前的节点深度和res的长度一样，那么就添加
这会先把右边的节点先全部添加了，然后再去左边找，如果深度再和res的长度一样，那么就添加，自己还真想不到。。。
*/

func rightSideView(root *TreeNode) []int {
	var res []int
	var dfs func(*TreeNode, int)

	dfs = func(root *TreeNode, depth int) {
		if root == nil {
			return
		}
		if depth == len(res) {
			res = append(res, root.Val)
		}
		dfs(root.Right, depth+1)
		dfs(root.Left, depth+1)
	}

	dfs(root, 0)
	return res
}

func main() {
	t1 := TreeNode{Val: 1, Left: nil, Right: nil}
	t2 := TreeNode{Val: 2, Left: nil, Right: nil}
	t3 := TreeNode{3, nil, nil}
	t1.Left = &t2
	t1.Right = &t3
	fmt.Println(rightSideView(&t1))
}
